import { createRouter, createWebHistory } from 'vue-router'
import { ElMessage } from 'element-plus'

// 路由配置
const routes = [
  {
    path: '/',
    redirect: '/login'
  },
  {
    path: '/login',
    name: 'Login',
    component: () => import('@/view/login/login.vue'),
    meta: {
      title: '登录',
      requiresAuth: false
    }
  },
  {
    path: '/register',
    name: 'Register',
    component: () => import('@/view/login/register.vue'),
    meta: {
      title: '注册',
      requiresAuth: false
    }
  },
  // 主应用路由（使用Layout布局）
  {
    path: '/app',
    name: 'App',
    component: () => import('@/layout/index.vue'),
    redirect: '/dashboard',
    meta: {
      requiresAuth: true
    },
    children: [
      // 仪表板/首页
      {
        path: '/dashboard',
        name: 'Dashboard',
        component: () => import('@/view/dashboard/index.vue'),
        meta: {
          title: '首页',
          requiresAuth: true,
          roles: [0, 1, 2]
        }
      },
      // 成绩管理
      {
        path: '/score',
        name: 'Score',
        component: () => import('@/view/score/index.vue'),
        meta: {
          title: '成绩管理',
          requiresAuth: true,
          roles: [0, 1, 2]
        }
      },
      // 学生管理
      {
        path: '/student',
        name: 'Student',
        component: () => import('@/view/student/index.vue'),
        meta: {
          title: '学生管理',
          requiresAuth: true,
          roles: [1, 2] // 仅管理员可访问
        }
      },
      // 班级管理
      {
        path: '/class',
        name: 'Class',
        component: () => import('@/view/class/index.vue'),
        meta: {
          title: '班级管理',
          requiresAuth: true,
          roles: [1, 2] // 仅管理员可访问
        }
      },
      // 课程管理
      {
        path: '/course',
        name: 'Course',
        component: () => import('@/view/course/index.vue'),
        meta: {
          title: '课程管理',
          requiresAuth: true,
          roles: [1, 2] // 仅管理员可访问
        }
      },
      // 管理员管理
      {
        path: '/admin',
        name: 'Admin',
        component: () => import('@/view/admin/index.vue'),
        meta: {
          title: '管理员管理',
          requiresAuth: true,
          roles: [2] // 仅超级管理员可访问
        }
      },
      // 系统设置
      {
        path: '/system',
        name: 'System',
        component: () => import('@/view/system/index.vue'),
        meta: {
          title: '系统设置',
          requiresAuth: true,
          roles: [2] // 仅超级管理员可访问
        }
      }
    ]
  },
  // 404页面
  {
    path: '/:pathMatch(.*)*',
    name: 'NotFound',
    component: () => import('@/view/error/404.vue'),
    meta: {
      title: '页面不存在'
    }
  }
]

// 创建路由实例
const router = createRouter({
  history: createWebHistory(),
  routes,
  scrollBehavior(to, from, savedPosition) {
    if (savedPosition) {
      return savedPosition
    } else {
      return { top: 0 }
    }
  }
})

// 路由守卫
router.beforeEach(async (to, from, next) => {
  try {
    // 动态导入用户store，避免循环依赖
    const { useUserStore } = await import('@/store/modules/user')
    const userStore = useUserStore()

    // 设置页面标题
    if (to.meta.title) {
      document.title = `${to.meta.title} - 成绩管理系统`
    }

    // 如果访问的是登录页或注册页，直接放行
    if (to.path === '/login' || to.path === '/register') {
      // 如果已登录用户访问登录页，重定向到首页
      if (userStore.isLoggedIn && to.path === '/login') {
        next('/dashboard')
        return
      }
      next()
      return
    }

    // 检查是否需要登录
    if (to.meta.requiresAuth) {
      if (!userStore.isLoggedIn) {
        ElMessage.warning('请先登录')
        next('/login')
        return
      }

      // 检查角色权限
      if (to.meta.roles && to.meta.roles.length > 0) {
        // 获取用户角色，优先使用数字格式的role
        let userRole = userStore.userInfo?.role

        // 如果没有role字段，尝试从userType转换
        if (userRole === undefined || userRole === null) {
          const userType = userStore.userInfo?.userType
          if (userType === 'student') userRole = 0
          else if (userType === 'admin') userRole = 1
          else if (userType === 'super_admin') userRole = 2
        }

        console.log('用户角色:', userRole, '页面要求角色:', to.meta.roles)

        if (!to.meta.roles.includes(userRole)) {
          ElMessage.error('没有访问权限')
          // 根据用户角色跳转到首页
          next('/dashboard')
          return
        }
      }
    }

    next()
  } catch (error) {
    console.error('路由守卫错误:', error)
    // 发生错误时，如果是访问登录页，直接放行
    if (to.path === '/login' || to.path === '/register') {
      next()
    } else {
      next('/login')
    }
  }
})

export default router
